home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume90 / util / setfont2 / part01
Encoding:
Internet Message Format  |  1990-03-26  |  34.7 KB

  1. Path: xanth!cs.odu.edu!Amiga-Request
  2. From: Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v90i117: SetFont 2.7 - change system font, Part01/01
  5. Message-ID: <11928@xanth.cs.odu.edu>
  6. Date: 26 Mar 90 02:30:17 GMT
  7. Sender: news@cs.odu.edu
  8. Reply-To: daveh@cbmvax.commodore.com (Dave Haynie)
  9. Lines: 766
  10. Approved: tadguy@cs.odu.edu (Tad Guy)
  11. X-Mail-Submissions-To: Amiga@cs.odu.edu
  12. X-Post-Discussions-To: comp.sys.amiga
  13.  
  14. Submitted-by: daveh@cbmvax.commodore.com (Dave Haynie)
  15. Posting-number: Volume 90, Issue 117
  16. Archive-name: util/setfont-2.7/part01
  17.  
  18. [ uuencoded executable enclosed. ...tad ]
  19.  
  20. An improved, and probably the last, SetFont utility.  This was
  21. done long ago, but apparently never got posted.  It's much like
  22. SetFont V2.5, only it tries to be more sensible about loading
  23. fonts from disk that are already in memory.  This one has
  24. source and binary, in a UUENCODED ZOO file.
  25.  
  26.                     -Dave Haynie
  27.  
  28.  
  29. #!/bin/sh
  30. # This is a shell archive.  Remove anything before this line, then unpack
  31. # it by saving it into a file and typing "sh file".  To overwrite existing
  32. # files, type "sh file -c".  You can also feed this as standard input via
  33. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  34. # will see the following message at the end:
  35. #        "End of archive 1 (of 1)."
  36. # Contents:  README SetFont.cp SetFont.uu
  37. # Wrapped by tadguy@xanth on Sun Mar 25 21:29:52 1990
  38. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  39. if test -f 'README' -a "${1}" != "-c" ; then 
  40.   echo shar: Will not clobber existing file \"'README'\"
  41. else
  42. echo shar: Extracting \"'README'\" \(2375 characters\)
  43. sed "s/^X//" >'README' <<'END_OF_FILE'
  44. X
  45. X
  46. X            SetFont V2.7 by Dave Haynie
  47. X
  48. X
  49. X    SetFont V2.7 is a public domain program designed to allow the system
  50. Xfont of the Amiga to be changed in various different ways.  The main bug fix
  51. Xover V2.5 or V2.6 is a theoretically correct handling of resident vs. disk
  52. Xfonts.  At least, it seems to work correclty this time around.  The program 
  53. Xis called from a shell or startup-sequence script, and has the form:
  54. X
  55. X    SetFont [fontname [point [places]]]
  56. X
  57. X    where:
  58. X
  59. X        fontname    Specifys the name of a standard Amiga 
  60. X                bitmapped font from the FONTS: directory.
  61. X                While any font can in theory be used, the
  62. X                system has trouble with very large ones,
  63. X                and some programs may have trouble with any
  64. X                font that's not 8x8.
  65. X
  66. X        point        Specifys the height of the font, in pixels.
  67. X                If that actual size isn't found, the closest
  68. X                available is substituted.  The default for
  69. X                this is 8.
  70. X
  71. X        places        There are several places the system keeps
  72. X                fonts.  When you change to a working font
  73. X                you may want that font everywhere in the
  74. X                system, in which case, no specifier is set.
  75. X                Otherwise, the following places are known
  76. X                by SetFont:
  77. X
  78. X            BAR        This is the "BarLayer" font for the WorkBench
  79. X                screen.  Among other things, the text in any
  80. X                string gadgets BEFORE you select them comes
  81. X                from this location.
  82. X
  83. X            SCREEN    This specified the default font for the 
  84. X                WorkBench screen.  All menus and newly built
  85. X                windows will inherit this font as their 
  86. X                default font.  Technically speaking, this is
  87. X                a font descriptor stored in the screen
  88. X                structure.
  89. X
  90. X            TITLES    This specifies the font that's mainly used
  91. X                for window title bars.  Technically speaking,
  92. X                this specifies the font of the screen's
  93. X                RastPort.
  94. X
  95. X            WINDOW    This specifies the font for the current window.
  96. X                It will case that window to be cleared.  The
  97. X                reason for this is that the window's font is
  98. X                not a default, but inherited from the screen
  99. X                and stored in the window's ConUnit.  That
  100. X                screen clear is the result of rebuilding the
  101. X                window's ConUnit to bring in the new font.
  102. X
  103. X    And that's about it.  Please feel free to use this program and the
  104. Xsource code as you see fit.  If you find any bugs, please let me know about
  105. Xthem.
  106. X
  107. X        -Dave Haynie
  108. X
  109. X        PLINK  :    hazy
  110. X        bix    :    hazy
  111. X        usenet :    {rutgers,uunet}!cbmvax!daveh
  112. X        Land   :    284 Memorial Avenue
  113. X                Gibbstown, NJ 08027
  114. END_OF_FILE
  115. if test 2375 -ne `wc -c <'README'`; then
  116.     echo shar: \"'README'\" unpacked with wrong size!
  117. fi
  118. # end of 'README'
  119. fi
  120. if test -f 'SetFont.cp' -a "${1}" != "-c" ; then 
  121.   echo shar: Will not clobber existing file \"'SetFont.cp'\"
  122. else
  123. echo shar: Extracting \"'SetFont.cp'\" \(10172 characters\)
  124. sed "s/^X//" >'SetFont.cp' <<'END_OF_FILE'
  125. X// =======================================================================
  126. X
  127. X/* SetFont 2.7 - by Dave Haynie
  128. X
  129. X            BIX:    hazy
  130. X            Usenet:    {uunet|rutgers}!cbmvax!daveh
  131. X            PLINK:    D-Dave H
  132. X             Drink:    Guinness
  133. X
  134. X   BUSINESS:
  135. X
  136. X    This program is complete, real, and true public domain software.
  137. X   Do with it what you will as long as you don't remove my name from it.
  138. X   Feel free to enhance this as you see fit.  I may eventually make one
  139. X   that's better....
  140. X   
  141. X   ABOUT IT:
  142. X
  143. X        SetFont V2.7 cleans up all known bugs in previous SetFont versions.
  144. X   The code is GREATLY cleaned up and simplified from SetFont V2.0.  I no 
  145. X   longer free any fonts that were previously set.  V2.0 did too much 
  146. X   freeing, but even with that, it is possible that another program could get 
  147. X   a pointer to the font or font descriptor in a window or screen and choke 
  148. X   if that's freed.  That may not be good behavior, but this way's safer.  A 
  149. X   future version will probably track fonts opened and closed by SetFont 
  150. X   itsself so that it can reclaim some of it's resources and still be 
  151. X   reasonably safe.  Right now I have no way of knowing if the font or 
  152. X   descriptor I see is even really owned by SetFont. SetFont 2.7 also cleans
  153. X   up the font open ordering, once and for all.  Apparently, the font system
  154. X   is broken or confused.  In SetFont 2.5, I opened a disk font first, and
  155. X   ended up with multiple copies of a single font in RAM.  In SetFont 2.6,
  156. X   I reversed the order and ended up missing disk fonts, as the software
  157. X   took the closest front to what I wanted from RAM.  Now I open both damn
  158. X   fonts, take the closest to what I'm looking for from the two, and close
  159. X   the other.  Ties go to the RAM font.
  160. X
  161. X
  162. X   CONFLICTS:
  163. X
  164. X    There are a few potential problems the general notion of SetFont in 
  165. X   the Amiga system.  First of all, many programs are written to support only
  166. X   the topaz 8 (80 column) font (sloppy, I know, but that's life).  If you're
  167. X   a 60 column user, you've probably experienced this before.  It's not a 
  168. X   problem with the Amiga as a whole, since most of the system will adjust 
  169. X   itself.  But it may be a problem with programs that have a fixed idea of 
  170. X   what a font should look like.  Most 80 column fonts work with most 
  171. X   applications, and an 80 column 8x8 font will work just about everywhere.  
  172. X   Some programs, like CLI for instance, have trouble with proportionally-
  173. X   spaced fonts.  The best thing to do is try out the font you like.  One 
  174. X   final problem is that some applications ask the WorkBench screen to close 
  175. X   when they start up.  It'll close if there's nothing else open on it, but 
  176. X   when it re-opens, it'll restart with the Preferences-selected font, not 
  177. X   the SetFont selected font.  Of course, preferences doesn't support 
  178. X   arbitrary fonts (which is why this program is even necessary).  Oh well, 
  179. X   maybe day.  
  180. X*/
  181. X
  182. X#include <exec/types.h>
  183. X#include <exec/io.h>
  184. X#include <exec/ports.h>
  185. X#include <exec/memory.h>
  186. X#include <graphics/gfxbase.h>
  187. X#include <graphics/text.h>
  188. X#include <graphics/rastport.h>
  189. X#include <libraries/dos.h>
  190. X#include <libraries/dosextens.h>
  191. X#include <intuition/intuition.h>
  192. X#include <string.h>
  193. X#include <ctype.h>
  194. X#include <stdio.h>
  195. X#include <stdlib.h>
  196. X
  197. X// =========================================================================
  198. X
  199. X// Miscellaneous stuff.
  200. X
  201. Xextern TextFont *OpenDiskFont(const TextAttr *);
  202. X
  203. Xinline BPTR CADDR(APTR cptr) { return BPTR(ULONG(cptr) >> 2); }
  204. X
  205. Xinline void fail(char *a, char *b = NULL) { printf(a,b); exit(10); }
  206. X
  207. Xinline UWORD abs(UWORD x) { return (x > 0)?x:(-x); }
  208. X
  209. Xinline MsgPort *contask(MsgPort *port) {
  210. X   return (MsgPort *) ((port->mp_SigTask->ln_Type == NT_PROCESS)
  211. X          ? ((Process *)port->mp_SigTask)->pr_ConsoleTask 
  212. X          : NULL);
  213. X}
  214. X
  215. X// =========================================================================
  216. X
  217. X// This is the "smart" font class.  SmartFont items stay around after the 
  218. X// program exits if they appear to have been used.  As it turns out, the
  219. X// Amiga font system looks somewhat broken.  If I OpenDiskFont(), I load
  220. X// the font, even if it's in memory.  If I OpenFonr(), I get the closest
  221. X// match to the font I want from the list of fonts in memory, not the
  222. X// big picture.  So SmartFont now gets a bit smarter, and knows how to
  223. X// find the best match from both possible sources.  The font opening order
  224. X// is important, since if I fetch a disk font, I'm sure to find it in RAM
  225. X// afterward.
  226. X
  227. Xclass SmartFont {
  228. X   private:
  229. X      static BOOL aok;            // Font checks out    
  230. X      TextAttr      sfattr;        // Font descriptor
  231. X      
  232. X   public:
  233. X      SmartFont(char *n, UWORD s);
  234. X
  235. X      TextFont *font();
  236. X
  237. X      TextAttr *attr() {
  238. X         TextAttr *a = (TextAttr *)AllocMem(sizeof(TextAttr),MEMF_PUBLIC|MEMF_CLEAR);
  239. X         a->ta_Name = (char *)AllocMem(strlen(sfattr.ta_Name)+1,MEMF_PUBLIC|MEMF_CLEAR);
  240. X         strcpy(a->ta_Name,sfattr.ta_Name);
  241. X         a->ta_YSize = sfattr.ta_YSize;
  242. X         return a;
  243. X      }
  244. X      char *name() { return sfattr.ta_Name; }
  245. X      UWORD size() { return sfattr.ta_YSize; }
  246. X};
  247. X
  248. XSmartFont::SmartFont(char *n, UWORD s = 8) {
  249. X   strcat(strcpy(sfattr.ta_Name = new char[strlen(n)+6],n),".font");
  250. X   sfattr.ta_YSize = (s>2)?s:8;
  251. X   sfattr.ta_Style = sfattr.ta_Flags = 0;
  252. X
  253. X   if (!aok) {
  254. X      TextFont *f = font();
  255. X      CloseFont(f);
  256. X      aok = TRUE;
  257. X   }
  258. X}
  259. X
  260. XTextFont *SmartFont::font() {
  261. X   TextFont *memf, *dskf;
  262. X
  263. X   if ((memf = OpenFont(&sfattr)) && sfattr.ta_YSize == memf->tf_YSize)
  264. X      return memf;
  265. X
  266. X   dskf = OpenDiskFont(&sfattr);
  267. X
  268. X   if (!memf && !dskf) fail("Font \"%s\" not found\n",sfattr.ta_Name);
  269. X   if (!memf && dskf)
  270. X      return dskf;
  271. X   else if (!dskf && memf)
  272. X      return memf;
  273. X   else if (abs(sfattr.ta_YSize - memf->tf_YSize) <=
  274. X            abs(sfattr.ta_YSize - dskf->tf_YSize)) {
  275. X      CloseFont(dskf);
  276. X      return memf;
  277. X   }
  278. X   CloseFont(memf);
  279. X   return dskf;
  280. X}
  281. X
  282. X// =========================================================================
  283. X// These classes manage the places that fonts are hidden.
  284. X
  285. X// This is the basic place node
  286. X
  287. Xclass PlaceNode : public Node {
  288. X   private:
  289. X      static Window *pwin;
  290. X      static Screen *pscr;
  291. X
  292. X   public:
  293. X      PlaceNode();      
  294. X      PlaceNode *next() { return (PlaceNode *)Node::next(); }
  295. X
  296. X      void testwindow() { if (!pwin) fail("Window not found\n"); }
  297. X      void testscreen() { if (!pscr) fail("Screen not found\n"); }
  298. X
  299. X      Window *window()  { return pwin; }
  300. X      Screen *screen()  { return pscr; }
  301. X
  302. X      virtual void set(SmartFont *f) {
  303. X         testwindow();
  304. X         SetFont(window()->graphic(),f->font());
  305. X         printf("\033c");              // Re-init window's conunit
  306. X         (void)flushall();
  307. X      }
  308. X};
  309. X
  310. X// Initialize the static stuff, once.
  311. X
  312. XPlaceNode::PlaceNode() {
  313. X   if (pwin) return;
  314. X
  315. X   StandardPacket *packet = new StandardPacket;
  316. X   InfoData *info = new InfoData;   
  317. X   MsgPort *port = new StdPort;
  318. X
  319. X  // Find the window
  320. X   if (contask(port)) {
  321. X      packet->sendio(contask(port),port,ACTION_DISK_INFO,CADDR(info));
  322. X      (void)port->wait();
  323. X      pwin = (Window *)info->id_VolumeNode;
  324. X   } else 
  325. X      pwin = NULL;
  326. X   delete port;
  327. X   delete info;
  328. X   delete packet;
  329. X
  330. X  // Find the screen
  331. X   pscr = (pwin) ? pwin->screen() : NULL;
  332. X}
  333. X
  334. X// These are the derived special nodes, one for each "place".
  335. X
  336. X#define WindowNode    PlaceNode
  337. X
  338. Xclass ScreenNode : public PlaceNode {
  339. X   public:
  340. X      void set(SmartFont *f) {
  341. X         testscreen();
  342. X         if (strcmp(screen()->Font->ta_Name,f->name()) == 0)
  343. X            screen()->Font->ta_YSize = f->size();
  344. X         else
  345. X            screen()->Font = f->attr();
  346. X      }
  347. X};
  348. X
  349. Xclass TitleNode : public PlaceNode {
  350. X   public:
  351. X      void set(SmartFont *f) {
  352. X         testscreen();
  353. X         SetFont(screen()->graphic(),f->font());
  354. X      }
  355. X};
  356. X
  357. Xclass BarNode : public PlaceNode {
  358. X   public:
  359. X      void set(SmartFont *f) {
  360. X         testscreen();
  361. X         SetFont(screen()->BarLayer->rp,f->font());
  362. X      }
  363. X};
  364. X
  365. X// This is the place list, which links a number of place nodes, and also
  366. X// manages to go work like finding windows, etc.
  367. X
  368. Xclass PlaceList : public List {
  369. X   public:
  370. X      PlaceList(int argc, char **argv);   
  371. X      PlaceNode *first() { return (PlaceNode *)List::first(); }
  372. X};
  373. X
  374. X// The PlaceList constructor does a great deal of the work.  It looks up
  375. X// the window data, then parses the command line to build the place
  376. X// list.
  377. X
  378. XPlaceList::PlaceList(int argc, char **argv) {
  379. X  // Parse our input arguments
  380. X   for (short i = 0; i < argc; ++i)
  381. X      switch (toupper(argv[i][0])) {
  382. X         case 'B': add(new BarNode);        break;
  383. X         case 'S': add(new ScreenNode);        break;
  384. X         case 'T': add(new TitleNode);        break;
  385. X         case 'W': add(new WindowNode);        break;
  386. X         default :                break;
  387. X      }
  388. X   if (is_empty()) {
  389. X      add(new BarNode);
  390. X      add(new ScreenNode);
  391. X      add(new TitleNode);
  392. X      add(new WindowNode);
  393. X   }
  394. X}
  395. X
  396. X// =========================================================================
  397. X
  398. X// Prints help notice
  399. X
  400. Xvoid PrintNotice() {
  401. X   printf("SetFont V2.7 by Dave Haynie\n\n");
  402. X   printf("Usage: SetFont [fontname [point [place]]]\n");
  403. X   printf("  where:\n");
  404. X   printf("  \2331mfontname\2330m  is the font's name (e.g. \"topaz\")\n");
  405. X   printf("  \2331mpoint\2330m     is the point size (default is 8)\n");
  406. X   printf("  \2331mplace\2330m     pick the place, one or more of:\n");
  407. X   printf("    \2331mBAR\2330m       set the barlayer font only\n");
  408. X   printf("    \2331mSCREEN\2330m    set the screen font only\n");
  409. X   printf("    \2331mTITLES\2330m    set the screen titles only\n");
  410. X   printf("    \2331mWINDOW\2330m    set the window's font only\n\n");
  411. X   printf("If no \2331mplace\2330m switch is given, everything is set.\n\n");
  412. X   exit(0);
  413. X}
  414. X
  415. X// The main function
  416. Xvoid main(int argc, char *argv[]) {
  417. X  // Automatic help command
  418. X   if (argc < 2 || argv[1][0] == '?') PrintNotice();
  419. X
  420. X  // Process the command-line arguments, AmigaDOS style.
  421. X   PlaceList *plist = new PlaceList(argc-2,&argv[3]);
  422. X
  423. X  // Get the font if it's there.
  424. X   SmartFont *font = new SmartFont(argv[1],atoi(argv[2]));
  425. X   
  426. X  // Here we apply all the requested changes.
  427. X   for (PlaceNode *n = plist->first(); n->next(); n = n->next()) n->set(font);
  428. X
  429. X  // And we're done!
  430. X   exit(0);
  431. X}
  432. END_OF_FILE
  433. if test 10172 -ne `wc -c <'SetFont.cp'`; then
  434.     echo shar: \"'SetFont.cp'\" unpacked with wrong size!
  435. fi
  436. # end of 'SetFont.cp'
  437. fi
  438. if test -f 'SetFont.uu' -a "${1}" != "-c" ; then 
  439.   echo shar: Will not clobber existing file \"'SetFont.uu'\"
  440. else
  441. echo shar: Extracting \"'SetFont.uu'\" \(19168 characters\)
  442. sed "s/^X//" >'SetFont.uu' <<'END_OF_FILE'
  443. Xbegin 664 SetFont
  444. XM```#\P`````````,``````````L```<9```"CP```!P````;````````````U
  445. XM``(J````!0```#<````%````2````!````/I```'&4CG?OY+[P`T)$@D`$GY\
  446. XM`````"QX``0I3@!`*4\`3$*L`$B3R4ZN_MHF0"EK`)@`.$JK`*QG``!P(`V0(
  447. XMK0`$!H````"`*4``!&$``7H@:P"LT<C1R")H`!#3R=/)(`)R`!(9*4D`5-"!1
  448. XM4H!"9U*``D#__I_`58!"=P@`(`)3@-2!'[(``"``4X)1R/_V'[P`("``4X(?N
  449. XML2``(`!1RO_X(D\O"6```&PI:P`Z``0&K````(``!&$``0YA``#X*4``2"\`I
  450. XM)$`@*@`D9Q(L;`9D($`B*```*4$`.$ZN_X(B*@`@9QHD/````^U.KO_B*4``9
  451. XM4&<*Y8@@0"=H``@`I"!L`$@O"$AL```@:``D*6@`!`!41_D```9T<@`@/```E
  452. XM`(U@`B;!4<C__$ZZ$%QP`&`$("\`!"\`("P`+&<$($!.D$ZZ!QHL>``$(FP&Z
  453. XM9$ZN_F)*K`9H9P@B;`9H3J[^8DJL!FQG"")L!FQ.KOYB2JP`6&<((FP`6$ZN]
  454. XM_F)*K`!(9R0B+``\9P1.KO_<(BP`4&<$3J[_W"QX``1.KO]\(FP`2$ZN_H8@J
  455. XM'RYL`$Q,WW]^3G5P9&"`0>L`7$ZN_H!!ZP!<3J[^C$YU0^P`7'``3J[]V"E`L
  456. XM!F1GVDYU``!.50``*6T`"`,**6T`#`,>*6T`$`,R*6P"^@-&2'@`0DAX`2QP3
  457. XM`"\`+P!(;`,Z+P!(;`+^+P!.N@%L3^\`($Y=3G4``$Y5__Q![`+4*TC__"!M^
  458. XM__Q*D&<*(%!.D%BM__Q@[DY=3G4``$Y5``!.N@`63KH`5B\M``A.NA?26$].Y
  459. XM74YU``!.5?_\2JP&C&8V<`$I0`:,0>P"Y"M(__P@;?_\2I!G!EBM__Q@\D'L=
  460. XM`N0B;?_\L\AC#EFM__PB;?_\(%%.D&#F3EU.=4Y5__Q(YP`01^P%.+;\``!G0
  461. XM-`@K``(`&V8H""L``0`;9R`B*P`0(&L`!+'!8Q0@")"!+P`O`2\K`!Q.N@KD!
  462. XM3^\`#"938,9,WP@`3EU.=0``3E7__"\M``A.N@,V6$\K0/_\2H!F$DJL`Z!G<
  463. XM""!L`Z!.D&#@<`!@!"`M__Q.74YU3E4``$JM``AG"B\M``A.N@-D6$].74YU:
  464. XM3E7__"!L`Z`I;0`(`Z`@"$Y=3G5.5?_\2JT`"&8$<`!@'B\M``A.N@F$6$](!
  465. XM;?_\+P`K0``(3KH'?%!/("W__$Y=3G5(YS`R+'D```9T(&\`&")O`!PD;P`@A
  466. XM)F\`)"`O`"@B+P`L)"\`,"8O`#1.KOZD3-],#$YU3E7__$CG(`!P`"E``!A*%
  467. XMK0`(:R0D+0`(M*P%T&P:(@+G@4'L!V@B2-/!2I%G"B("YX'1P2`(8`AP"2E`:
  468. XM!1AP`$S?``1.74YU````````````````````````````````2JP&=&820^P%&
  469. XM!'``+'@`!$ZN_=@I0`9T*6P`5`2X2'@`*$AX`/IP`"\`+P!(;`3P+P!(;`36*
  470. XM+P!.NO\R3^\`($AX`!1.NA7.6$].=0```````````````$Y5__!(YP`@<`!%%
  471. XM[`4X*T#_^"M`__2T_```9R1*J@`89QHO"DAX__].N@F64$]*@&<&</\K0/_XV
  472. XM4JW_]"128-9*K?_X9P1P_V`$("W_]$S?!`!.74YU``````````!P84Y5```O*
  473. XM+0`(80983TY=3G5.5?_L2.<#("XM``A*AVX&<`!@``#$#(<````(;`)^""`'#
  474. XM(`=6@.2`Y8`N`$'L!<@D4"M(__BT_```9TXB*@`$LH=M/K*'9A(@4B)M__@BP
  475. XMB)^L!<P@"F```(`@*@`$D(<,@`````AM&B!*($K1QR"2(4``!")M__@BB)^LL
  476. XM!<P@"F!6*TK_^"128*P@!R(L!G`@!]"!4X!.NA-8(BP&<$ZZ%"Q0@"P`(`8@6
  477. XM!E:`Y(#E@"P`+P9.N@&^6$\K0/_P2H!G%"\&+P!.N@0^4$\O!V$`_S!83V`"O
  478. XM<`!,WP3`3EU.=0```````````````$Y5```B+0`(#($````P;0P,@0```#ENQ
  479. XM!'`!8`)P`$Y=3G4``$Y5__8O+0`(3KK]OEA/*T#_]DJ`9@1P_V`J+RT`$"\MP
  480. XM``P@;?_V+R@`!$ZZ%9Q/[P`,*T#_^DJL`!AG!'#_8`0@+?_Z3EU.=4Y5__A*T
  481. XMK`:09QPK;`:0__@@;?_X+Q`O+`:03KH#>%!/D<@I2`:02JT`"&8$<`!@,%BM-
  482. XM``@O+0`(3KK^7EA/*T#__$J`9@1P`&`6*VW__/_X(&W_^""M``@@;?_\6(@@B
  483. XM"$Y=3G5.50``2JT`"&<00J=ACEA/(&T`"%F(*4@&D'``3EU.=4Y5__1(YS``>
  484. XM2JT`#&8*+RT`"&',6$]@>$JM``AF#"\M``QA`/]86$]@9B!M``A9B"`068`KK
  485. XM0/_T*TC__+'L!I!G"$*G80#_-EA/+RT`#&$`_RQ83RM`__A*@&<P)"T`#"8MW
  486. XM__2V@F,$*T+_]"`M__0B`"!M``@B;?_X8`(2V%.!9/HO+0`(80#_6%A/("W_\
  487. XM^$S?``Q.74YU3E7_^"`M``@&@`````PO0```("\``'(`+'@`!$ZN_SHK0/_\1
  488. XM2JW__&8$<`!@-"`M``@&@`````P@;?_\(4``""\(2&P&E&$``0A03TJL!;QFC
  489. XM!BEM__P%O"!M__S0_``,(`A.74YU3E7__"\M``AAD%A/*T#__$J`9@8P?/__N
  490. XM(`A.74YU3E7_^$CG`2!A``"`<``I0``0*4``""E```PI0`7(*4`%S"E`!<`IW
  491. XM0`6\*4`%Q$JL!;1G3"`L!G`B+`6TTH!3@2`!(BP&<$ZZ$+`B+`9P3KH1A%"`B
  492. XM+@`@!R`'5H#D@.6`+@`O!V$`_Q983R1`M/P``&8$</]@#"\'+PI.N@%X4$]PT
  493. XM`$S?!(!.74YU3E7_^"ML!I3__$JM__QG)"!M__PK4/_X(FW__"!M__P@*``(\
  494. XM+'@`!$ZN_RXK;?_X__Q@UI'(*4@&F"E(!I1.74YU3E4``$CG`"`B;0`((&D`$
  495. XM!")M``PC2``$D<@BB"1M``A*DF8")(E*J@`$9P8@:@`$((DE20`$3-\$`$Y=#
  496. XM3G4``````````````````````````````````````````'!A3E4``%*L!J!3N
  497. XMK`5F("P%9DJ`:Q0@;`5>4JP%7B`M``@0@'(`$A!@&"`M``@"@````/](;`5:!
  498. XM+P!.N@3R4$\B`$Y=3G5.50``0JP&H$AM``PO+0`(2'K_JDZZ#M1/[P`,2&P%0
  499. XM6DAX__].N@3"4$\@+`:@3EU.=0``3E7_^"\M``A.NOHR6$\K0/_\2H!F!'#_'
  500. XM8"HO+0`0+RT`#"!M__PO*``$3KH1<$_O``PK0/_X2JP`&&<$</]@!"`M__A.4
  501. XM74YU````````<&%.5?_\("T`#"\`+RT`""M`__QA!E!/3EU.=4Y5_^A(YR$P?
  502. XM+BT`#$J';@9P_V```/(,AP````AL`GX((`<@!U:`Y(#E@"X`(&T`""M(__31C
  503. XMQ]^L!<Q#[`7()%$K2/_P*TG_^+3\``!G``"B($H@*@`$($K1P"M(_^PD+?_PK
  504. XMM<)C%B)M__0BBB-'``0F;?_X)HEP`&```(RUPF8>(E(F;?_T)HD@*@`$(@#2'
  505. XMAR=!``0B;?_X(HMP`&!H(FW_]+/(9`B?K`7,</]@6+/(9BY*DF<.(A*T@6,(^
  506. XMGZP%S'#_8$+?J@`$2I)G$+229@P@0B`H``31J@`$))!P`&`F*TK_^"MM_^S_*
  507. XMZ"128`#_6B!M__@@K?_TD<@B;?_T(H@C1P`$(`A,WPR$3EU.=4Y5__!(YR```
  508. XM<``K0/_\*T#_^"M`__`@;0`($A`,`0`M9@QP`2M`__@K0/_P8`P,`0`K9@9PB
  509. XM`2M`__AP`"!M``@B+?_X$#`8`"\`3KKZC%A/2H!G*B`M__QR"DZZ#EPB+?_X!
  510. XM4JW_^'0`(&T`"!0P&`#0@@2`````,"M`__Q@O$JM__!G!$2M__P@;0`,(*W_%
  511. XM_"`M__A,WP`$3EU.=4Y5__)(YP`@0BW_^W`(*T#__%.M__P@+0`,(@`"@0```
  512. XM``]![`4<T<$B+?_\&Y`8\^B`*T``#`*`#____RM```Q*K0`,9LQ![?_ST>W_E
  513. XM_")()&T`"!399OQP")"M__Q,WP0`3EU.=4Y5```O+0`,+RT`"&&,4$].74YU$
  514. XM``!.5?_P2.<@('`+*T#_\$(M__]3K?_P("T`#"(``H$````'!H$````P)"W_^
  515. XM\!N!*/3F@"M```P"@!____\K0``,2JT`#&;,0>W_]-'M__`B2"1M``@4V6;\O
  516. XM<`N0K?_P3-\$!$Y=3G5.50``+RT`#"\M``AAC%!/3EU.=0``3E7_\$CG`"!P"
  517. XM"RM`__!"+?__4ZW_\"`M``QR"DZZ#%P&@0```#`@+?_P&X$(]"`M``QR"DZZN
  518. XM#$0K0``,2JT`#&;00>W_]-'M__`B2"1M``@4V6;\<`N0K?_P3-\$`$Y=3G4`D
  519. XM`$Y5``!P`"!M``@0$$/L`ZG3P!`1"````V<&4JT`"&#D("T`"$Y=3G4`````=
  520. XM``!P84Y5__A(YP$`(&T`#$H89OQ3B)'M``PN""!M``A*&&;\4XB1[0`((`@B7
  521. XM;0`(T\`K2?_X(BT`$+Z!8P(N`2`'(&T`#&`"$MA3@&3Z(&W_^$(P>``@+0`(E
  522. XM3-\`@$Y=3G4``$Y5__PK;0`(__P@;?_\2A!G&'``$!`O`$ZZ`!I83R!M__P03
  523. XM@%*M__Q@X"`M``A.74YU```@+P`$#```86T*#```>FX$!```($YU``!.5?_XM
  524. XM+RT`"$ZZ]>983RM`__A*@&8$</]@2"!M__@(*``#``-G$DAX``)"IR\M``A.K
  525. XMNO?V3^\`#"\M`!`O+0`,(&W_^"\H``1.N@U63^\`#"M`__Q*K``89P1P_V`$+
  526. XM("W__$Y=3G4``$Y5_^Q(YR`@)&T`#"`M``@B*@`8)`$"@@```#$K0/_T2H)GT
  527. XM!G#_8``"R"`!`H```(``5L)$`DB"2,(;0O_^2JH`%&8``)((`0`"9@``BG``Y
  528. XM)4``#`RM_____P`(9P`"DB\*3KH"E%A/2H!G#`CJ``4`&W#_8``">@CJ``$`T
  529. XM&THM__YG#B`J`!0B`$2!)4$`#&`(("H`%"5```Q3J@`,("H`#$J`:Q0@:@`$H
  530. XM4JH`!"`M``@0@'(`$A!@%B`M``@"@````/\O"B\`80#_-E!/(@`@`6```AP(K
  531. XM*@`"`!MG:"(M``@,@?____]F!G``8``"`AM!__]*+?_^9R8,@0````IF'G`">
  532. XM+P!(;`4P+RH`'"M`__!.NOZ$3^\`#"M`__A@''`!+P!(;?__+RH`'"M`__!.)
  533. XMNOYF3^\`#"M`__AP_RM```A@``#\".H``0`;2BW__F=6(BT`"`R!_____V=*8
  534. XM5*H`#`R!````"F8B(&H`!%*J``00O``-2JH`#&L,+PI(>/__80#^?%!/4JH`T
  535. XM#"!J``12J@`$("T`"!"`2JH`#&L``5!P_RM```@@*@`$D*H`$"M`__!*@&<``
  536. XM`(((*@`&`!IG7DAX``)"IR\J`!Q.NO7R3^\`#"M`_^Q*+?_^9T)3K?_L("W_<
  537. XM[$J`:S9"IR\`+RH`'$ZZ]<Q/[P`,2'@``4AM__TO*@`<3KKY1$_O``Q*K``8[
  538. XM9@P0+?_]#```&F?`3G$O+?_P+RH`$"\J`!Q.NOUJ3^\`#"M`__A@!G``*T#_[
  539. XM^"(M__@,@?____]F"`CJ``4`&V`,LJW_\&<&".H`!``;2BW__F<.("H`%"(`H
  540. XM1($E00`,8!@(*@`"`!MG"'``)4``#&`(("H`%"5```P@:@`0)4@`!"(M``@,S
  541. XM@?____]G+%.J``P@*@`,2H!K$"!J``12J@`$$(%P`!`08!`"@0```/\O"B\!^
  542. XM80#].%!/("H`&`*`````,$J`9P1P_V`2(BW_]`R!_____V8$<`!@`B`!3-\$V
  543. XM!$Y=3G5.50``(&T`"$JH`!1G#`@H``,`&V8$<`!@/"\L`Z1.NO.(6$\@;0`(H
  544. XM(4``!"%``!!*@&8*<`PI0`48</]@&"%L`Z0`%`*H____\P`8<``A0``,(4``Q
  545. XM"$Y=3G4``````````'!A3E7_\$CG`3`D;0`(#*P````@!J1L``"0$A(,`0`@A
  546. XM9PP,`0`)9P8,`0`*9@12BF#H2A)G<B`L!J3E@%*L!J1![`:LT<`K2/_\#!(`/
  547. XM(F8H4HH@BDH29PH,$@`B9P12BF#R2A)F#$AX``%.N@@V6$]@G$(24HI@EB!M'
  548. XM__P@BDH29Q@2$@P!`"!G$`P!``EG"@P!``IG!%**8.1*$F8"8`A"$E**8`#_L
  549. XM:$JL!J1F!B!L`$A@!$'L!JPI2`:H2JP&I&8``(9![`6@(DA'[`<L)MDFV2;95
  550. XM)MDVD29L`$@B:P`D2'@`*"\I``1(;`<L3KKZI$_O``Q![`<L(@@D/````^XLS
  551. XM;`9D3J[_XBE`!VP@+`=L*4`'='($*4$'<"E`!WPI00=XY8`K0/_PD\DL>``$A
  552. XM3J[^VBM`__0@;?_P(FW_]"-H``@`I'X`8#(L;`9D3J[_RBE`!VPL;`9D3J[_7
  553. XMQ"E`!W1![`6R(@@D/````^TL;`9D3J[_XBE`!WQ^!"`'(`<`@```@`&!K`=H^
  554. XM(`<@!P"```"``H&L!W``K```@`,'>$JL!31G!'``8`8@/```@``N`$*L!50@#
  555. XM!R`'`(`````!*4`%4'`!*4`%=B`'(`<`@`````(I0`5R<`(I0`68(`<@!P"`X
  556. XM````@"E`!91!^@=2*4@`,"\L!J@O+`:D3KH`(E!/0J=.NNZZ6$],WPR`3EU.^
  557. XM=0``````````````````3OD```:$````````````````<&%.5?_$2.<@('``<
  558. XM&WP`(/_[<@`K0?_V=/\K0O_R0>W_T!M`__$;0/_\&T#__1M`__X;0/__*T'_F
  559. XMY"M!_^@K2/_,(&T`"$H09U00$`)``/]R&%U!:TBP>Q`(9O9.^Q`$`"-@```L&
  560. XM`"!@```>`"M@```0`"U@```"&WP``?__8!@;?``!__Y@$!M\``'__6`(&WP`N
  561. XM`?_\3G%2K0`(8*0@;0`($A`,`0`P9@H;?``P__M2K0`((&T`"`P0`"IF$B)M4
  562. XM``P@45B1*U#_]E*M``A@$$AM__8O"$ZZ]F)03]&M``@@;0`($A`,`0`N9C!2-
  563. XMK0`((&T`"`P0`"IF$B)M``P@45B1*U#_\E*M``A@$$AM__(O"$ZZ]B903]&M^
  564. XM``@@;0`($A`,`0!L9@P;?``!__%2K0`(8`H,`0!H9@12K0`((&T`"!`04JT`]
  565. XM"!M`__`"0`#_<C!=06L``FZP>Q`(9O1.^Q`$`&-@``)$`'-@``'\`%A@``&*$
  566. XM`'A@``&$`'!@``%L`&]@``$:`'5@``#P`&1@```"2BW_\6<,(FT`#"!16)$@^
  567. XM$&`*(FT`#"!16)$@$"M`_^Q*@&H*<@%$K?_L*T'_Z$JM_^AG!'`M8`Q*+?_^;
  568. XM9P1P*V`"<"`;0/_0<``0+?_^(BW_Z(*`<``0+?_]@H!*@6<(4JW_S%*M_^0O$
  569. XM+?_L+RW_S$ZZ]LI03RM`_\A*K?_R:@9P`2M`__(@+?_((BW_\I*`*T'_Q$J!=
  570. XM;S(@;?_,(DC3P2(`)$A@`A+:4X%D^G``$"W_^R(M_\0@;?_,8`(0P%.!9/H@:
  571. XM+?_R*T#_R-&M_^1![?_0*TC_S$HM__]G``%<&WP`(/_[8``!4DHM__%G#")MR
  572. XM``P@45B1(!!@"B)M``P@45B1(!`K0/_L8`#_7DHM__%G#")M``P@45B1(!!@7
  573. XM"B)M``P@45B1(!`K0/_L2BW__&<2(&W_S!"\`#!2K?_,<@$K0?_D+P`O+?_,F
  574. XM3KKU=%!/*T#_R&``_R0;?``P__M*K?_R:@9P""M`__)*+?_Q9PPB;0`,(%%8P
  575. XMD2`08`HB;0`,(%%8D2`0*T#_[$HM__QG'B!M_\P0O``P4JW_S"!M_\P0O`!X7
  576. XM4JW_S'("*T'_Y"\`+RW_S$ZZ](Y03RM`_\@,+0!8__!F`/ZT2&W_T$ZZ]F)82
  577. XM3V``_J8B;0`,(%%8D2)0*TG_S++\``!F"$'L!;@K2/_,(&W_S$H89OQ3B)'MR
  578. XM_\PK2/_D2JW_\FLN(BW_\K'!;R8K0?_D8"!P`2M`_^0B;0`,(%%8D2`0&T#_V
  579. XMT$(M_]%@!G``8```J"(M_^0D+?_VM(%L"'``*T#_]F`$DZW_]DHM__]G0E.M5
  580. XM_^0@+?_D2H!K&'``(&W_S!`04JW_S"\`(&T`$$Z06$]@W%.M__8@+?_V2H!K+
  581. XM5'``$"W_^R\`(&T`$$Z06$]@XE.M__8@+?_V2H!K$G``$"W_^R\`(&T`$$Z0=
  582. XM6$]@XE.M_^0@+?_D2H!K&'``(&W_S!`04JW_S"\`(&T`$$Z06$]@W"`M``A,I
  583. XMWP0$3EU.=4Y5__8K;0`0__8@;0`,$!!2K0`,&T#__TH`9W8,```E9C`@;0`,N
  584. XM#!``)68&4JT`#&`@+RT`"$AM__8O"&$`^TQ/[P`,*T#_^DJ`9P8K0``,8+A*C
  585. XMK``T9R8(+0`'__]G'G``$"W__R\`(&T`"$Z06$\@;0`,$!!2K0`,&T#__W``M
  586. XM$"W__R\`(&T`"$Z06$]@`/]Z3EU.=0```````'!A2H!J```>1(!*@6H```Q$W
  587. XM@6$``"!$@4YU80``&$2`1(%.=4J!:@``#$2!80``!D2`3G4O`DA!-`%F```BZ
  588. XM2$!(04A"-`!G```&A,$P`DA`-`"$P3`"2$(R`B0?3G4O`W80#$$`@&0```;AZ
  589. XMF5%##$$(`&0```;IF5E##$$@`&0```;EF55#2D%K```&XYE30S0`YJA(0D)"5
  590. XMYJI(0X#!-@`P`C0#2$'$P9""9```"%-#T(%D_G(`,@-(0^>X2$##0"8?)!]."
  591. XM=2YY````3$ZY```$$"\\````%$ZY```"0"!"(D,D`"8!2$)(0\3!QL#`P=1#5
  592. XM2$)"0M"")@DD"$YU(&\`"")O``1*&6;\4XD2V&;\("\`!$YU(&\`!")O``@2K
  593. XM&+(99@A*`6;V<`!.=6X$</].=7`!3G4@;P`((F\`!!+89OP@+P`$3G4``"!O@
  594. XM``1*&&;\4XB1[P`$(`A.=0``3E7_^$CG`2!^`$7L!VB^K`70;!Y*DF<4""H`L
  595. XM`@`#9P)@"B\J``1.N@'X6$]2AU"*8-PO+0`,+RT`"$ZZYLY03TS?!(!.74YU0
  596. XM3E7__'``(CP``#``+'@`!$ZN_LX"@```,``K0/_\2H!F!'``8"1*K``P9QH@3
  597. XM;``P3I!*@&8$<`!@$$*G2'@`%$ZZ_W903R`M__Q.74YU8;!.=0``2JP&=&829
  598. XM0^P&4'``+'@`!$ZN_=@I0`9T*6P`5`802'@`/$AX`/IP`"\`+P!(;`8\2&P&$
  599. XM(DAL!@0O`$ZZZ(!/[P`@4X!G!'#_8`)P`$YU``!.5?_\2.<!`$JL`#!G!$ZZ&
  600. XM_TQ"K``8(BT`""0M``PF+0`0+&P&9$ZN_]8N``R'_____V82+&P&9$ZN_WPI2
  601. XM0``8<`4I0`48(`=,WP"`3EU.=4Y5__Q(YP$`2JP`,&<$3KK^_$*L`!@B+0`(1
  602. XM)"T`#"8M`!`L;`9D3J[_T"X`#(?_____9A(L;`9D3J[_?"E``!AP!2E`!1@@7
  603. XM!TS?`(!.74YU3E7_^$CG,0)*K``P9P1.NOZL0JP`&"`M`!!3@"]``!`B+0`(K
  604. XM)"T`#"8O`!`L;`9D3J[_OBX`#(?_____9A(L;`9D3J[_?"E``!AP%BE`!1@@8
  605. XM+0`0#(`````"9QP,@`````%G"DJ`9B(@+0`,8!P@!R`'T*T`#&`2(BT`"'0`'
  606. XM=@`L;`9D3J[_ODYQ3-]`C$Y=3G4``$Y5``!*K``P9P1.NOX<(BT`""QL!F1.2
  607. XMKO_<<`!.74YU```#[`````(````````9H```&90````!`````0``$Z(````$Y
  608. XM````!@``&8X```."```!$@````X````````#\@```^D```*/3E7__$CG`!"_A
  609. XM[``$90`)JB9M``BV_```9@Q(>``(3KH)R%A/)D`O+0`,3KH)GEA/7(`O`$ZZ&
  610. XM";)83R:`+RT`#"\`3KH)[%!/2&P`="\`3KH)L%!/,BT`$@Q!``)C"'``,"T`J
  611. XM$F`"<`@W0``$<``70``'%T``!DIL!GIF&"\+82!83R\`*T#__$ZZ"5)83SE\\
  612. XM``$&>B`+3G%,WP@`3EU.=4Y5__A(YS@0O^P`!&4`"0HF;0`(+PM.N@EF6$\KB
  613. XM0/_\2H!G#C0K``0@0+1H`!1G``#&+PM.N@D>6$\K0/_X2JW__&8<2H!F&"!3[
  614. XM+PA(;`!Z3KH))E!/2'@`"DZZ"0I83TJM__QF#DJM__AG""`M__A@``"$2JW_H
  615. XM^&8,2JW__&<&("W__&!P(&W__#`H`!0R*P`$)`&40`*"``#__PR"`````&(,M
  616. XM)`&40`*"``#__T2"(&W_^#`H`!0F`99``H,``/__#(,`````8@R20`*!``#_"
  617. XM_T2!)@&T@V(.+PA.N@A>6$\@+?_\8`XO+?_\3KH(3EA/("W_^$S?"!Q.74YUQ
  618. XM3E7_Y$CG,#*_[``$90`(#"9M``BV_```9@Q(>``23KH(*EA/)D`@"R!+L/P`9
  619. XM`&8.2'@`#DZZ"!183R!`8`*1R"`+0>P`D"=(``Y*K`9\9P8@"V```6A"K?_P$
  620. XM2'@`1$ZZ!^I83Y'((D`C2``$(HAR!1-!``AT`!-"``DC2``*(T@`#D)I`!(BJ
  621. XM0"M)__#2_``4)$`E20`*%4$`"!5"``DE2``8)4@`#C5\`#``$B5``!1(>``DO
  622. XM*T#__$ZZ!Y!83Y'(+P@O""M`__@K2/_L3KH'0%!/*T#_[$J`9@Y(>``.3KH'2
  623. XM:EA/($!@`I'(*VW_[/_L(&W_[")H`!`0*0`(*TC_]`P```UF!B!I`*1@`I'(`
  624. XML/P``&=N$"D`"`P```UF!B!I`*1@`I'(("W_^"(`Y(ET%'89(FW__".#*`@C<
  625. XM@2@4=@`C@R@8(X,H'"1Q*``L;?_T(XXH!"5.``XO,2@`+P@K0?_D*TC_Z$ZZ:
  626. XM!JQ03R\M__1.N@;`6$\@;?_X*6@`'`9\8`1"K`9\+RW_]$ZZ!NA83R\M__A.I
  627. XMN@;>6$\O+?_\3KH&U%A/2JP&?&<*(FP&?"!I`"Y@`I'(*4@&@"`+3-],#$Y=@
  628. XM3G5.5?_N2.<`,+_L``1E``9()FT`"+;\``!F#$AX``Y.N@9F6$\F0"`+($NPH
  629. XM_```9@Y(>``.3KH&4%A/($!@`I'((`L@2R)(6(D@B2%(``A"J``$<@`100`,7
  630. XM$4$`#29(0FW__C`M__Y(P+"M``QL``%6,"W__B(`2,'E@2)M`!`@<1@`$A!(D
  631. XM@4C!1>P#J=7!$A((`0`!9PX2$$B!2,$$@0```"!@$B(`2,'E@2!Q&``0$$B`-
  632. XM2,`B`'`@!$``"&L``/ZRNP`(9O).^P`&````5V```-````!48```C````%-@%
  633. XM``!(````0F````)"K?_Z2'@`$DZZ!9)83R\`*T#_^F$`_3Q83T'L`*@B0"-(B
  634. XM``XB"R!++P`O""M`__8K0/_Z3KH%HE!/8```ED*M__)(>``23KH%5%A/+P`KH
  635. XM0/_R80#\_EA/0>P`F")`(T@`#B(+($LO`"\(*T#_]BM`__).N@5D4$]@6$*M$
  636. XM_^Y(>``23KH%&%A/+P`K0/_N80#\PEA/0>P`H")`(T@`#B(+($LO`"\(*T#_H
  637. XM]BM`_^Y.N@4H4$]@'$*G80#\F%A/(@L@2R\`+P@K0/_V3KH%#%!/3G%2;?_^T
  638. XM8`#^H"`+($LB4$J19@``RD*M__I(>``23KH$K%A/+P`K0/_Z80#\5EA/0>P`$
  639. XMJ")`(T@`#B(+($LO`"\(*T#_]BM`__I.N@2\4$]"K?_R2'@`$DZZ!')83R\`R
  640. XM*T#_\F$`_!Q83T'L`)@B0"-(``XB"R!++P`O""M`__8K0/_R3KH$@E!/0JW_Q
  641. XM[DAX`!).N@0X6$\O`"M`_^YA`/OB6$]![`"@(D`C2``.(@L@2R\`+P@K0/_V=
  642. XM*T#_[DZZ!$A03T*G80#[NEA/(@L@2R\`+P@K0/_V3KH$+E!/(`M,WPP`3EU.#
  643. XM=;_L``1E``.N2&P`L$ZZ!`983TAL`,Y.N@/\6$](;`#Z3KH#\EA/2&P!!$ZZ:
  644. XM`^A83TAL`3I.N@/>6$](;`%N3KH#U%A/2&P!HDZZ`\I83TAL`=).N@/`6$](.
  645. XM;`(`3KH#MEA/2&P",$ZZ`ZQ83TAL`F).N@.B6$]"ITZZ`XA83TYU3E7_]$CGQ
  646. XM`""_[``$90`#)DZZ`U@,K0````(`"&T0(FT`#"!I``00$`P``#]F!&$`_U`@-
  647. XM+0`(58`@;0`,T/P`#"\(+P!"IV$`_)9/[P`,(&T`#"\H``@K0/_\3KH#&EA/Q
  648. XM`H```/__+P`@;0`,+R@`!$*G80#Y"$_O``P@;?_\*U#_]"M`__@@;?_T2I!G1
  649. XM&B)H``XD42\M__@O"$Z24$\@;?_T*U#_]&#>0J=.N@+66$],WP0`3EU.=;_L4
  650. XM``1E``)V,"P&>"(`4D$Y009X2D!F-$AX`"%(;`*:3KH"A%!/*4`&=$J`9AI"9
  651. XMIR\\``.`!$ZZ`E!03TAX`!1.N@*(6$]@!G``8`)P`$YUO^P`!&4``B8P+`9X@
  652. XM4T`Y0`9X2D!F#"\L!G1.N@*"6$]@`G``3G5.5?_\2.<`$+_L``1E``'X)FT`@
  653. XM"$JL!H!F&$*G2&P"K$ZZ`D103TAX``I.N@(H6$]@`G``(FP&@"!I`4XO+0`,#
  654. XM+T@`"&$`^*A83R\`(&\`""\H``Q.N@'.4$],WP@`3EU.=4Y5__A(YP`0O^P`K
  655. XM!&4``98F;0`(2JP&@&880J=(;`*L3KH!XE!/2'@`"DZZ`<983V`"<``K;`:`9
  656. XM__P@;?_\T/P`5"\M``PO2``(80#X0%A/+P`O+P`(3KH!:E!/3-\(`$Y=3G5.@
  657. XM5?_\2.<`,+_L``1E``$R)FT`"$JL!H!F&$*G2&P"K$ZZ`7Y03TAX``I.N@%BQ
  658. XM6$]@`G``(FP&@"!I`"@D;0`,(E(O"2\03KH`_E!/2H!F%")L!H`@:0`H(FT`#
  659. XM##%I``0`!&!>+SP``0`!2'@`"$ZZ`4Y03R)M``P@42\(*T#__$ZZ`-!83U*`1
  660. XM+SP``0`!+P!.N@$L4$\@;?_\((`B;0`,(%$O""\`3KH!$%!/(&T`#")M__PS8
  661. XM:``$``0@;`:`(4D`*$S?#`!.74YU3E7__$CG`!"_[``$90``:"9M``A*K`9\E
  662. XM9AA"ITAL`KY.N@"T4$](>``*3KH`F%A/8`)P`"ML!GS__"\M``QA`/<>6$\OA
  663. XM`"!M__PO*``R3KH`1%!/2&P"T$ZZ`'Q83TZZ`&I,WP@`3EU.=4[Y`````$[Y.
  664. XM````R$[Y```9C$[Y```9W$[Y`````$[Y```:$$[Y````X$[Y`````$[Y````=
  665. XM+$[Y```!"$[Y```"\$[Y```"'$[Y`````$[Y```#3$[Y```9Q$[Y```"0$[YK
  666. XM```$:$[Y```#($[Y```)0$[Y````&$[Y````3$[Y````]$[Y```9_$[Y````V
  667. XM'````^P````,````````"@X```G````)_```"?````H4```*"```"AH```H"6
  668. XM```*,@``"<P```GJ```)N@````$````(```)K@````$````)```)]@````<`7
  669. XM```*```*.```"BP```G&```)Y```"B8```G2```)M`````,````+```)V```U
  670. XM"B````G>`````````_(```/I````'+_L``1E``!*+RP#F$AL`U!.N@!*4$\I#
  671. XM0`:$2H!F&D*G+SP``X`"3KH`+E!/2'@`%$ZZ`#!83V`"<`!.=;_L``1E```.L
  672. XM+RP&A$ZZ`!Y83TYU3OD``!F,3OD`````3OD```$(3OD```)`3OD```#T<&$`-
  673. XM``/L`````@````````!D````4@````,````*````:@```%@```!>````````4
  674. XM`_(```/I````&[_L``1E``!.+RP#G$AL`V1.N@!(4$\I0`:(2H!F''``+P`OS
  675. XM`$AL`W9.N@`V3^\`##!\__\I2`:(8`*1R$YUO^P`!&4``!`O+`:(3KH`&EA/R
  676. XM3G4``$[Y```9C$[Y```!"$[Y```!V$[Y````]````^P````"`````````&(`M
  677. XM``!6`````@````H```!H````7`````````/R```#Z0````````/R```#Z0``H
  678. XM``````/R```#Z@```9T``````````````````````````````````````````
  679. XM`````````````````````````````````````````````````````````````
  680. XM`````````````````````&1O<RYL:6)R87)Y`&1O<RYL:6)R87)Y`"YF;VYTW
  681. XM`$9O;G0@(B5S(B!N;W0@9F]U;F0*``````E"````````"'@````````(%```Q
  682. XM``````>R`````%-E=$9O;G0@5C(N-R!B>2!$879E($AA>6YI90H*`%5S86=EK
  683. XM.B!3971&;VYT(%MF;VYT;F%M92!;<&]I;G0@6W!L86-E75U="@``("!W:&5RL
  684. XM93H*`"`@FS%M9F]N=&YA;66;,&T@(&ES('1H92!F;VYT)W,@;F%M92`H92YGC
  685. XM+B`B=&]P87HB*0H``"`@FS%M<&]I;G2;,&T@("`@(&ES('1H92!P;VEN="!S(
  686. XM:7IE("AD969A=6QT(&ES(#@I"@`@()LQ;7!L86-EFS!M("`@("!P:6-K('1HU
  687. XM92!P;&%C92P@;VYE(&]R(&UO<F4@;V8Z"@``("`@()LQ;4)!4ILP;2`@("`@+
  688. XM("!S970@=&AE(&)A<FQA>65R(&9O;G0@;VYL>0H`("`@()LQ;5-#4D5%3ILPF
  689. XM;2`@("!S970@=&AE('-C<F5E;B!F;VYT(&]N;'D*`"`@("";,6U4251,15.;F
  690. XM,&T@("`@<V5T('1H92!S8W)E96X@=&ET;&5S(&]N;'D*`"`@("";,6U724Y$V
  691. XM3U>;,&T@("`@<V5T('1H92!W:6YD;W<G<R!F;VYT(&]N;'D*"@``268@;F\@V
  692. XMFS%M<&QA8V6;,&T@<W=I=&-H(&ES(&=I=F5N+"!E=F5R>71H:6YG(&ES('-EB
  693. XM="X*"@!I;G1U:71I;VXN;&EB<F%R>0!38W)E96X@;F]T(&9O=6YD"@!7:6YDE
  694. XM;W<@;F]T(&9O=6YD"@`;8P`````'/```````````````````!XP````\````M
  695. XM/@````!2871S(0````+T``$!```&``,``````````````Q(``0$```8`"P``B
  696. XM```````````#)@`!`0``!@`3``````````````````$!```&``,`````````/
  697. XM`````````&=R87!H:6-S+FQI8G)A<GD`````9&ES:V9O;G0N;&EB<F%R>0``Y
  698. XM0V]U;&1N)W0@;W!E;B!$:7-K1F]N="!,:6)R87)Y`````````"$````A````+
  699. XM`````@``("`@("`@("`@*"@H*"@@("`@("`@("`@("`@("`@("!($!`0$!`02
  700. XM$!`0$!`0$!`0A(2$A(2$A(2$A!`0$!`0$!"!@8&!@8$!`0$!`0$!`0$!`0$![
  701. XM`0$!`0$!`1`0$!`0$(*"@H*"@@("`@("`@("`@("`@("`@("`@("$!`0$"`@;
  702. XM("`@("`@("`H*"@H*"`@("`@("`@("`@("`@("`@($@0$!`0$!`0$!`0$!`0@
  703. XM$!"$A(2$A(2$A(2$$!`0$!`0$(&!@8&!@0$!`0$!`0$!`0$!`0$!`0$!`0$!2
  704. XM$!`0$!`0@H*"@H*"`@("`@("`@("`@("`@("`@("`@(0$!`0(````/__````R
  705. XM#@`.````````````````*BH@4W1A8VL@3W9E<F9L;W<@*BH``/__````!``$T
  706. XM````````!,````2L15A)5```__\````$``0````````$Z@````!I;G1U:71IH
  707. XM;VXN;&EB<F%R>0`````````P,3(S-#4V-S@Y86)C9&5F``````T*`````(``Y
  708. XM```%6@``````````````````````````````````````````!7P`````````@
  709. XM`````````````````````````````````````````````````````````````
  710. XM``````````````````!C;VXZ,3`O,3`O,S(P+S@P+P`J````````````````?
  711. XM```````````````````````````H*BH@57-E<B!!8F]R="!297%U97-T960@%
  712. XM*BH``/__````#@`.````````!=0`````__\````$``0`````````````!?!#%
  713. XM3TY424Y510``__\````$``0````````&&`````!!0D]25`#__P````0`!```$
  714. XM``````8V`````&EN='5I=&EO;BYL:6)R87)Y```````````````````````$&
  715. XM`````^P````&`````0```N0```+4````J````*````"8````D`````(````"F
  716. XM```"Z````M@````"`````P```NP```+<````#`````8```9(```&+@``!A0`#
  717. XM``7\```%6@``!3@```3\```$Y@``!.(```,B```##@```OH````````#\@``4
  718. XM`^D````%(&\`!""(6)!"J``$(4@`"$YU``````/P`````E].97=,:7-T````0
  719. XM``````````/R```#Z0```#=(YSP@)B\`&!0O`!]Z_R\%3KD```!X$@!P`!`!Q
  720. XM*`!R_[*`6(]F!'``8&8O/``!``%(>``B3KD````<)$`J"E"/9@XO!$ZY````I
  721. XMC'``6(]@0"5#``H50@`)%7P`!``(0BH`#A5$``]"ITZY````9"5``!!*@UB/1
  722. XM9PHO"DZY````H&`*2&H`%$ZY`````%B/(`I,WP0\3G4O"B1O``A*J@`*9PHOY
  723. XM"DZY````M%B/%7P`_P`(</\E0``4<``0*@`/+P!.N0```(Q(>``B+PI.N0``)
  724. XM`#1/[P`,)%].=0`````#[`````$````'````B`````@````*````-@```!(`=
  725. XM``!J````P@```$8```!\````I@```,X````````#\`````$N3#@`````*@``R
  726. XM``$N3#<`````4`````$N3#8`````@@````$N3#$`````D`````$N3#$T````1
  727. XMK`````$N3#$R````C`````-?1&5L971E4&]R=`````"6`````U]#<F5A=&50,
  728. XM;W)T```````````````#\@```^D````%+PXL>0``!H@@;P`(3J[_XBQ?3G4`M
  729. XM``/L`````0````8````$`````````_`````$7T]P96Y$:7-K1F]N=```````$
  730. XM```````````#\@```^D```!(2.<!!BQY````0"XO`!`J;P`43J[_E$S?8(!.&
  731. XM=2\.+'D```!`3.\``P`(3J[_.BQ?3G4``"\.+'D```!`(F\`""`O``Q.KO\N?
  732. XM+%].=2\.+'D```!`3.\#```(3J[_$"Q?3G4``"\.+'D```!`(F\`"$ZN_MHL*
  733. XM7TYU+PXL>0```$`@+P`(3J[^MBQ?3G4O#BQY````0"`O``A.KOZP+%].=2\.'
  734. XM+'D```!`(F\`"$ZN_IXL7TYU+PXL>0```$`B;P`(3J[^F"Q?3G4O#BQY````A
  735. XM0$SO`P``"$ZN_I(L7TYU```O#BQY````0"!O``A.KOZ`+%].=2\.+'D```!`#
  736. XM(F\`"$ZN_F(L7TYU+PXL>0```$`B;P`(("\`#$ZN_=@L7TYU```#[`````T`T
  737. XM```&```!#````/@```#D````S````+@```"D````D````'P```!H````4```;
  738. XM`#@````@````!@````````/P`````U]/<&5N3&EB<F%R>0```0@````$7T-LU
  739. XM;W-E3&EB<F%R>0```````/0````#7U=A:710;W)T````````X`````)?4'5TF
  740. XM37-G`````,@````"7U)E;5!O<G0```"T`````E]!9&10;W)T````H`````-?>
  741. XM1G)E95-I9VYA;`````",`````U]!;&QO8U-I9VYA;````'@````#7T9I;F14&
  742. XM87-K````````9`````)?061D2&5A9````$P````"7T9R965-96T````T````!
  743. XM`U]!;&QO8TUE;0```````!P````"7T%L97)T`````````````````_(```/I"
  744. XM````$"\.+'D```:$(F\`""!O``Q.KO^^+%].=2\.+'D```:$(&\`"$ZN_[@L9
  745. XM7TYU+PXL>0``!H0B;P`(3J[_LBQ?3G4```/L`````P````8````P````'```F
  746. XM``0````````#\`````-?0VQO<V5&;VYT```````L`````U]/<&5N1F]N=```=
  747. X=`````!@````"7U-E=$9O;G0``````````````_(L=
  748. X``
  749. Xend
  750. Xsize 13664
  751. END_OF_FILE
  752. if test 19168 -ne `wc -c <'SetFont.uu'`; then
  753.     echo shar: \"'SetFont.uu'\" unpacked with wrong size!
  754. fi
  755. # end of 'SetFont.uu'
  756. fi
  757. echo shar: End of archive 1 \(of 1\).
  758. cp /dev/null ark1isdone
  759. MISSING=""
  760. for I in 1 ; do
  761.     if test ! -f ark${I}isdone ; then
  762.     MISSING="${MISSING} ${I}"
  763.     fi
  764. done
  765. if test "${MISSING}" = "" ; then
  766.     echo You have the archive.
  767.     rm -f ark[1-9]isdone
  768. else
  769.     echo You still need to unpack the following archives:
  770.     echo "        " ${MISSING}
  771. fi
  772. ##  End of shell archive.
  773. exit 0
  774. -- 
  775. Mail submissions (sources or binaries) to <amiga@cs.odu.edu>.
  776. Mail comments to the moderator at <amiga-request@cs.odu.edu>.
  777. Post requests for sources, and general discussion to comp.sys.amiga.
  778.